\chapter{复杂场景下的说话人确认技术}

虽然目前的说话人确认系统已经有很好的表现，但是在智能手机，智能家居，以及车载设备等这些实际应用场景中，系统的识别准确率识别准确率会显著下降会显著下降，这是因为这些场景中存在噪声干扰、混响、远场场景语音信号的衰减、录音设备条件复杂等因素。因此，复杂场景下的鲁棒性说话人确认是目前工业界与学术界在该领域研究的难点和热点。

本章节将第二章中探索出的最佳模型ECAPA-TDNN和ResNet34应用于复杂场景的研究中，同时针对复杂场景中说话人确认系统可能存在的问题，使用补体交叉熵和对比损失函数、结合使用卷积与注意力机制、使用模型汤和分数融合策略，探索提升系统鲁棒性的方法。

\section{改进方案}

针对复杂场景中说话人确认系统可能存在的问题，如数据不平衡、说话人信息难以提取等，本文提出了损失函数、模型结构改进、后端策略的改进方案。

\subsection{补体交叉熵}

近年来，深度神经网络在许多分类任务上都取得了显著的成功，这些网络大部分采用交叉熵损失函数。然而，
各种新兴的数据集都表现出了极不平衡的类别分布，这在很大程度上限制了DNN模型的泛化能力，这种不平衡分布是一个关键性的挑战。

为了解决这个问题，一个常见的策略是重新采样数据集，对少数类过采样，对多数类欠采样，以及两者的混合。
另一种方法是采用代价敏感学习，例如，通过反类频率来重估样本明智损失，并通过分配相对较高的损失来惩罚硬分类样本（通常是少数类）。
然而，这些方法通常忽略了一个事实，即少数类的样本可能有噪音或错误的注释。
这意味着偏重于少数类而不是多数类的训练标准可能会导致模型泛化能力不佳\ucite{ren2018learning}。

同样在在CN-Celeb数据集中，也有很多不平衡的问题。比如，各个场景的音频数量、音频时长均相差较大，同时每个说话人的音频数量、
音频时长也有较大差距，有的说话人只有一条音频，且音频时长不超过3秒，而有的说话人则有许多的音频数据。
即CN-Celeb数据集无论是各个场景的数据，还是各个说话人的数据，都存在不平衡的问题。
因此本文使用补体交叉熵损失函数（Complement Cross Entropy Loss，CCE Loss）\ucite{kim2021imbalanced}来解决数据类别不平衡的问题。

交叉熵损失函数定义于公式\ref{equation:CrossEntropy}中，最大限度地减少这种软最大损失，就可以最大限度地提高地面真值类的预测概率，这将是一个很好的模型优化特性。
然而，这种损失可能不足以显式地最小化错误类的预测概率，特别是对于少数类，因为在错误类上的所有softmax概率都被忽略了，因此预测不准确的概率可能会产生累积误差，尤其是在类不平衡分布中。

补充熵（Complement Entropy）旨在通过辅助主要训练目标交叉熵来鼓励模型学习增强表示,它是在整个例子的不正确类别上作为信息熵的平均值来计算的，其公式为：

\begin{equation}
	C(\hat{\mathbf{y}})=-\frac{1}{N} \sum_{i=1}^{N} \sum_{j=1, j \neq g}^{K} \frac{\hat{\mathbf{y}}_{[j]}^{(i)}}{1-\hat{\mathbf{y}}_{[g]}^{(i)}} \log \frac{\hat{\mathbf{y}}_{[j]}^{(i)}}{1-\hat{\mathbf{y}}_{[g]}^{(i)}}
	\label{eq:complement_entropy}
\end{equation}

平衡互补熵被设计用来匹配交叉熵和互补熵之间的尺度，表述为：

\begin{equation}
	\tilde{C}(\hat{\mathbf{y}})=\frac{\gamma}{K-1} C(\hat{\mathbf{y}})
	\label{eq:balance_entropy}
\end{equation}

综合公式\ref{equation:CrossEntropy}、公式\ref{eq:complement_entropy}、公式\ref{eq:balance_entropy}，最后得到的CCE Loss为：

\begin{equation}
	H(\mathbf{y}, \hat{\mathbf{y}})+\tilde{C}(\hat{\mathbf{y}})
\end{equation}

\subsection{对比损失函数}

在潜在空间中基于对比学习（Contrastive Learning）的判别方法最近凸显出了很大的前景\ucite{bachman2019learning}，
受此启发，\emph{SimCLR}\ucite{chen2020simple}框架通过对比自监督学习算法在图像表征领域取得了很大成功，
其在潜在空间的对比损失最大化同一数据示例的不同增强视图之间的一致性来学习表征。该框架主要包含以下四个组件：

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=1.0]{figures/chapter3/contrastive_loss.drawio.pdf}
	\caption{对比学习框架}
	\label{fg:contrastive_learning}
\end{figure}

\begin{itemize}
	\item 一个随机数据增强模块，随机地转换任何给定的数据示例成同一示例的两个相关视图。
 	\item 一种神经网络基编码器$f(\cdot)$，用于从扩充数据示例中提取表示向量。
  	\item 一个小的神经网络投影头$g(\cdot)$，它将表示映射到应用对比损失的空间。
   	\item 一个为对比预测任务定义的对比损失函数（Contrastive Loss）。
\end{itemize}

对于随机抽取的$N$个样本的小批，并将对比性预测任务定义在来自迷你批的一对数据增强的例子上，从而得到2N个数据点，
并将迷你批中的其他2（N-1）个增强的例子视为负面例子\ucite{chen2017sampling}。那么最终，
一对正面例子$(i,j)$对比损失函数的公式如下：

\begin{equation}
	\ell_{i, j}=-\log \frac{\exp \left(\operatorname{sim}\left({z}_{i}, {z}_{j}\right) / \tau\right)}{\sum_{k=1}^{2 N} \mathbb{1}_{[k \neq i]} \exp \left(\operatorname{sim}\left({z}_{i}, {z}_{k}\right) / \tau\right)}
\end{equation}

\subsection{注意力机制}

尽管CNN在声纹领域已经取得了巨大的成功，但其仍然有它的局限性，由于卷积核的机制，它主要专注于局部空间建模，但缺乏全局性的环境融合。
基于CNN的模型不能很好地处理远距离的依赖关系\ucite{zhang2022mfa}。Transformer架构\ucite{vaswani2017attention}在声纹识别领域吸引了越来越多的人的主义，
其能建模长距离依赖的特性广泛应用于自然语言处理，但其在声纹领域的绝大多数应用仍落后于最先进的CNN。

\begin{equation}
	y_{i}=\sum_{j \in \mathcal{L}(i)} w_{i-j} \odot x_{j}~~~~~~(depthwise\ convolution)
	\label{eq:depthwise_convolution}
\end{equation}

\begin{equation}
	y_{i}=\sum_{j \in \mathcal{G}} \underbrace{\frac{\exp \left(x_{i}^{\top} x_{j}\right)}{\sum_{k \in \mathcal{G}} \exp \left(x_{i}^{\top} x_{k}\right)}}_{A_{i, j}} x_{j} \quad 
	~~~~~~(self-attention)
	\label{eq:self-attention}
\end{equation}

公式\ref{eq:depthwise_convolution}和公式\ref{eq:self-attention}分别说明了卷积操作和自注意力机制的公式。
对比卷积操作和注意力机制，可以发现它们互有优劣，具体来说有以下几点：

\begin{itemize}
	\item 第一，卷积核是一组与输入无关的参数，而注意力权重动态依赖于输入。因此自注意更容易捕捉到不同空间位置之间复杂的关系相互作用，
	这是在处理高级概念时非常重要的属性，然而这种性质也带来了更容易过拟合的风险。
	\item 第二，对于给定的任意位置对$(i, j)$，卷积权重只关心它们之间的相对移动而非其具体的数值，即卷积权重具有翻译等价性，在规模有限的数据集下可以提高泛化能力。
	这也解释了为什么当数据集不是非常大的时候，卷积网络往往比Transformer架构更好。
 	\item 第三，感受野的大小是自注意和卷积之间最关键的区别之一。一般来说，更大的感受野能提供更多的上下文信息，进而可能提高的模型容量。
	因此，全局接受域一直是在使用自注意力的关键动机。然而，较大的感受野需要更多的计算，在全局注意的情况下，复杂度会非常高，这也限制了自注意力模型。
\end{itemize}

\begin{table}[htbp]
	\centering
	\caption{卷积机制和注意力机制的属性}
	\begin{tabular}{c|c|c}
	\hline
	属性      & 卷积                            & 自注意力                          \\ \hline
	平移等变率   & $$\checkmark$$ &                               \\
	输入自适应权重 &                               & $$\checkmark$$ \\
	全局感受野   &                               & $$\checkmark$$ \\ \hline
	\end{tabular}
	\label{tb:properties_of_conv_attention}
\end{table}

如图表\ref{tb:properties_of_conv_attention}所示，卷积机制和注意力机制的理想性质存在互补的可能。然而，这里的一个关键挑战是如何有效地结合它们，在准确性和效率之间实现更好的权衡。
2021年图像识别领域提出了CoAtNets\ucite{dai2021coatnet}网络并在ImageNet竞赛上达到了90.88\%的top-1精度。
其从机器学习中的泛化和模型容量两个基本方面系统地研究了杂交卷积和注意力问题。卷积层由于其强的诱导偏差先验，往往具有更好的泛化和更快的收敛速度，
而注意层有更高的模型容量，可以受益于更大的数据集。常用的深度卷积可以有效地合并到简单的相对注意层，以适当的方式简单地叠加卷积层和注意力层，
可以有有效地实现更好的泛化和模型容量。

具体来说，CoAtNet结合两种的方法是在Softmax归一化之前或之后（前规范版本和后规范版本），将全局静态卷积核与自适应注意矩阵求和，其公式为：

\begin{equation}
	y_{i}^{post}=\sum_{j \in \mathcal{G}}\left(\frac{\exp \left(x_{i}^{\top} x_{j}\right)}{\sum_{k \in \mathcal{G}} \exp \left(x_{i}^{\top} x_{k}\right)}+w_{i-j}\right) x_{j} ~~~{ or }~~~ y_{i}^{pre}=\sum_{j \in \mathcal{G}} \frac{\exp \left(x_{i}^{\top} x_{j}+w_{i-j}\right)}{\sum_{k \in \mathcal{G}} \exp \left(x_{i}^{\top} x_{k}+w_{i-k}\right)} x_{j}
\end{equation}

前规范版本其实是一种特定的和对自注意力变体。在这种情况下，注意权值由偏移等方差${\omega}_{i-j}$和输入自适应的$x x$共同决定。
同时为了在不增加参数数量的情况下启用全局卷积核，${\omega}_{i-j}$视为了标量。

本文借鉴CoAtNets融合卷积和自注意力机制的方法，对ECAPA-TDNN模型进行改进，让其在帧级别的建模上，也能处理远距离的依赖关系。具体来说，
在ECAPA-TDNN的SE-Res2Blocks之后，增加了CoAtNet中的前规范版本的相对注意力机制。同时，为了防止过拟合，本文只在前两快的SE-Res2Blocks之后添加，最后一块保持不变。

\subsection{模型汤}

传统的最大化模型准确性的方法一般分为两步，首先用各种超参数训练多个模型；之后选择在验证集中表现最好的单个模型，并丢弃其余的。
在模型汤（Model Soups）策略\ucite{wortsman2022model}中，用各种超参数训练多个模型后，
第二步的方案不是选择在验证集中达到最高精度的单个微调模型，而是分别平均微调模型的权重。
这样可以在不产生任何额外推断或内存成本的情况下，提高准确性和鲁棒性。

模型汤策觉主要有三种，分别是平均汤（Uniform soup）、贪婪汤（Greedy soup）和习得汤（Learned soup）。
平均汤的方法为将所有模型参数进行一个平均，得到最终的模型；习得汤则需要一个验证集，通过学习在保留的验证集上的不同的汤的混合系数，得到最终模型，
但这个方法需要将所有模型加载到内存中，开销较大且实现难度较高。

本文将采用易于实现且效果更好的贪婪汤，具体来说，其方法为：

\begin{enumerate}
	\item 将预训练好的模型（5个）按其在验证集中的表现（损失函数）降序排列。
 	\item 设置一个成分队列，依次比较：成分队列中模型权重平均出来的模型在验证集上的结果，
	成分队列中加入当前模型后再平均出来的模型再验证集上的结果。若后者表现优于前者，则将当前模型加入到成分队列中，某则不加入。
	\item 最后的成分队列即是贪婪汤的结果，将队列中的模型权重平均，即得到最终模型。
\end{enumerate}

\section{实验处理}

\subsection{CN-Celeb数据集}

CN-Celeb数据集\ucite{fan2020cn, li2022cn}的最初目的是研究在无约束条件下说话人识别技术的真正挑战，并为研究人员构建原型系统和评估性能提供资源。理想情况下，它可以作为一个独立的数据源使用，也可以与其他数据集如VoxCeleb一起使用。CN-Celeb涵盖了更多的语言类型，其有意收集了11个类型的数据，包括娱乐、采访、唱歌、戏剧、电影、vlog、直播、演讲、戏剧、朗诵和广告。一个演讲者的演讲可以有5种以上的类型，而VoxCeleb中的大部分话语都是从采访视频中提取的。类型的多样性使得CN-Celeb数据集在不受约束的条件下更能代表真实的场景，但也更具挑战性。

与VoxCeleb数据集类似，CN-Celeb也分成了CN-Celeb1和CN-Celeb2两个数据集。CN-Celeb1收录了1000位中国名人的13万多条言论，语音总时长为274小时；CN-Celeb2则更大，收录了52万多条语音，语音总时长1090小时，具体如下表\ref{tb:cnceleb-statistic}所示。CN-Celeb的测试集Cn-Celeb.E为CN-Celeb1的子集，其数据概要如下表\ref{tb:cnceleb_e-statistic}所示。

\begin{table}
	\centering
	\caption{CN-Celeb数据集统计情况}
	\begin{tabular}{lll}
		\hline
		数据集       & CN-Celeb1 & CN-Celeb2 \\ 
		\hline
		说话人个数（人）  & 1,000     & 2,000     \\
		音频数目      & 130,109   & 529,485   \\
		音频总时长(小时) & 274       & 1,090     \\ 
		\hline
	\end{tabular}
	\label{tb:cnceleb-statistic}
\end{table}

\begin{table}
	\centering
	\caption{Cn-Celeb.E统计情况}
	\begin{tabular}{l|ll}
	\hline
	注册数据 & 音频平均时长  & 28秒       \\
		 & 说话人平均音频 & 5条        \\ 
	\hline
	测试数据 & 音频平均时长  & 8秒        \\
		 & 说话人平均音频 & 90条       \\ 
	\hline
	性别情况 & 男性      & 84        \\
		 & 女性      & 116       \\ 	 
	\hline
	测试对  & 目标说话人   & 18,024    \\
		 & 非目标说话人  & 3,586,776 \\ 
	\hline
	\end{tabular}
	\label{tb:cnceleb_e-statistic}
\end{table}

\subsection{实验模型}

本章训练了12个说话人嵌入模型，实验模型大部分为ECAPA和ResNet的变体。

\begin{itemize}
	\item {ECAPA\_1024}：在ECAPA模型中，中间隐层的通道数设置为1024，同时也是本文的基线模型
	\item {ECAPA\_2048}：在ECAPA模型中，中间隐层的通道数设置为2048。
	\item {ECAPA\_1024\_Contrastive\_Loss}：在ECAPA\_1024模型的基础上，应用了对比损失函数。
	\item {ECAPA\_1024\_Transformer}：在ECAPA\_1024模型的基础上，借鉴CoAtNets融合卷积和自注意力机制的方法，
	在前两块SE-Res2Blocks之后，增加了CoAtNet中的前规范版本的相对注意力机制。
	\item {ECAPA\_1024\_Transformer\_CCE\_Loss}：在ECAPA\_1024\_Transformer的基础上，
	使用上文中提到的CCE Loss替换原来的AAM-Softmax。
	\item {CNN\_ECAPA\_1024}：最近提出了混合CNN-TDN\ucite{thienpondt2021integrating}架构，
	其在ECAPA\_1024模型的基础上，在模型前向增加了4层通道数为128的二维CNN网络。
	\item {ResNet34\_512}：在ResNet34模型中，中间隐层的通道数为$[64, 128, 256, 512]$，池化层使用多头的ASP池化层。
	\item {ResNet34-SE\_512}：在ResNet34\_512的基础上，在残差块中最后一层加入了缩放比为8的SE Block。
	\item {ResNet34\_256}：在ResNet34模型中，中间隐层的通道数为$[32, 64, 128, 256]$，池化层使用多头的ASP池化层。
	\item {ResNet34-SE\_256}：在ResNet34\_256的基础上，在残差块中最后一层加入了缩放比为8的SE Block。
	\item {ResNet34-DTCF}：在ResNet34\_512的基础上，
	加入了二元时间通道频率（Duality-Temporal-Channel-Frequency，DTCF）\ucite{zhang2021multi}注意力机制代替SE Block，
	在时间和频率维度上聚合全局上下文来重新校准通道特征，从而学习到更具辨别力的说话人表示。
	\item {CoAtNet}：借鉴CoAtNet\ucite{dai2021coatnet}模型，使用其在ImageNet中所用的表现最好的参数。
	通过将输入的图像大小改成音频输入的特征大小，探索其在说话人确认领域复杂数据集上的表现。
\end{itemize}

\subsection{实验结果}

本章的实验使用了上章节中提到的数据增广方式。训练说话人嵌入模型的特征为80维的Fbank，窗长为25毫秒，窗移为10毫秒。损失函数采用AAM-Softmax。

在模型的训练和推理过程中，考虑到硬件设备的能力，因此将训练音频数据进行了3秒的切分操作，以减少训练过程中显存的大小。因此在模型的测试过程中，
本文进行了两种测试方法，第一种为不做音频切分的全量测试操作；第二种为将测试音频切分成多个3秒的音频（最后一个音频为反向3秒），并将的到的说话人嵌入取平均操作。
结果表明，3秒的测试音频在CN-Celeb数据集上表现更好。

同时，本文还通过分数融合（Score Fusion）操作，通过融合来消除各个模型在某些方面的过拟合，提高最终结果的泛化能力，
最终模型表现在CN-Celeb上取得了很大提升。本文使用了平均融合和全量融合两种策略，平均融合指直接将各个模型在各个得分上的分数取平均；
全量融合通过不断迭代来优化各个模型在最终得分上的权重，以得到最终结果。

针对CN-Celeb数据集中十一种不同的场景，本文使用ECAPA1024模型，测试其在不同场景下的表现，来进一步分析不同场景对说话人确认模型的影响。
结果如下表\ref{tb:scenes}所示。

\begin{table}
	\centering
	\caption{ECAPA1024在各个场景的表现结果}
	\begin{tabular}{ccc}
	\hline
	场景   & EER(\%)   & minDCF(p=0.01) \\ 
	\hline
	基线   & 9.52  & 0.5208         \\
	广告   & 25.00 & 0.7515         \\
	戏剧   & 8.47  & 0.5780         \\
	娱乐   & 9.93  & 0.5794         \\
	采访   & 7.40  & 0.4914         \\
	直播   & 7.43  & 0.3966         \\
	电影   & 15.75 & 0.6648         \\
	游戏   & 12.00 & 0.7108         \\
	朗诵   & 3.81  & 0.4016         \\
	歌唱   & 18.60 & 0.9544         \\
	演讲   & 3.21  & 0.1763         \\
	Vlog & 5.41  & 0.3845         \\ 
	\hline
	\end{tabular}
	\label{tb:scenes}
\end{table}

从表\ref{tb:scenes}中我们可以得知，在采访、直播、朗诵、演讲、vlog场景下，尤其是朗诵、演讲这种干净的环境下，说话人确认模型的表现优于其他复杂环境，
说明环境噪声、其他人声、混响等复杂因素对于说话人确认模型的鲁棒性有很大影响。

\begin{table}[htbp] 
	\centering
	\caption{所有系统在CN-Celeb.E上的表现}
    \begin{tabular}{llll}
        \hline
        System Index & Model Name            & EER(\%)     & minDCF \\ 
        \hline
        A1           & ECAPA\_1024           & 8.81  & 0.4915 \\
        A2           & +Transformer          & 9.17  & 0.4927 \\
        A3           & +Transformer+CCE Loss & 10.13 & 0.5062 \\
        A4           & +Contrastive Loss     & 8.73  & 0.4779 \\
        \textbf{B}            & \textbf{ECAPA\_2048}           & \textbf{8.81}  & \textbf{0.4504} \\
        C1           & ResNet34\_512         & 9.39  & 0.4862 \\
        C2           & +SE Block             & 9.15  & 0.4729 \\
        C3           & +DTCF                 & 9.30  & 0.4839 \\
        D1           & ResNet34\_256         & 9.19  & 0.5019 \\
        D2           & +SE Block             & 8.73  & 0.4540 \\
        E            & CNN\_ECAPA\_1024      & 9.14  & 0.4794 \\
        F            & CoAtNet               & 13.78 & 0.6461 \\ 
        \hline
        \textbf{Fusion}       & \textbf{{[}A1+A4+B+C1+C2+E{]}} & \textbf{7.83}  & \textbf{0.4157} \\ 
        \hline
    \end{tabular}
    \label{tab:table_result}
\end{table}

实验结果表\ref{tab:table_result}中的所有结果是使用过模型汤、切分音频测试后的最好结果。从表中可知，在本文实验的模型中最好的单一模型是ECAPA\_2048，
它在CN-Celeb.E测试集上实现了最低的EER/minDCF，为8.81\%/0.4504。同时，分数融合策略也有较大的提升，最好的分数融合结果相对最好的单模型在EER/minDCF相对提升了11\%/7\%。

\section{本章小结}
本章节探索了复杂场景下的说话人确认技术。首先，介绍了为了对抗不平衡数据集而设计的损失函数补体交叉熵、在潜空间中学习信息的方法对比学习、为了解决卷积不能学到全局信息的问题的机制自注意力机制，以及提高模型表现的策略模型汤；其次介绍了在11个不同复杂场景下录制的中文数据集CN-Celeb，其包括包括采访、电影、广告等复杂场景。最后，通过模型汤、分数融合策略、切分测试音频策略，在Cn-Celeb.E测试集上，EER和minDCF指标都有一定的提升。最终，本文在CN-Celeb.E上取得了EER/minDCF为7.83\%/0.4157的结果。